/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sopra09.lv6659438.objekte;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQuery;

/**
 * Repräsentiert einen Literatureintrag in Form eines Buches mit einer m:n Beziehung
 * zur Klasse Autor.
 * @author TJ
 */
@Entity
@NamedQuery(
    name = "sucheBuecher",
    query = "SELECT DISTINCT b FROM Buch b JOIN b.autoren aut WHERE " +
    "b.titel LIKE :titel " +
    "OR b.jahr LIKE :jahr "  +
    "OR EXISTS (SELECT a FROM Autor a WHERE a = aut AND a.name LIKE :autor)"    
)
public class Buch extends Literatureintrag {
    private final static String BUCH = "buch";
    private Set<Autor> autoren = new HashSet<Autor>();
    private String jahr;

    public Buch() {
    }

    public void Buch(String titel, int jahr, Set<Autor> autorenMenge) {
        setTitel(titel);
        setJahr(jahr);
        setAutoren(autorenMenge);
    }

    public Buch(String titel, int jahr) {
        setTitel(titel);
        setJahr(jahr);
        setAutoren(autoren);
    }

    
    @Override
    public String toString() {
        return "sopra09.lv6659438.objekte.Buch[id=" + id + "]";
    }

    //owning side
    @ManyToMany
    public Set<Autor> getAutoren() {
        return autoren;
    }


    public void setAutoren(Set<Autor> autoren) {
        this.autoren = autoren;
    }

    public void addAutor(Autor autor) {
        if (autoren == null) {
            autoren = new HashSet<Autor>();
        }

        autoren.add(autor);
    }

    /**
     * @return the jahr
     */
    public String getJahr() {
        return jahr;
    }

    /**
     * @param jahr the jahr to set
     */
    public void setJahr(int jahr) {
        String jahrAlsString = Integer.toString(jahr);
        this.jahr = jahrAlsString;
    }

    @Override
    public String getTyp() {
        return BUCH;
    }  

}
